<?php namespace Common\Model;
use Hdphp\Model\Model;
use Common\Model\GoodsAttr;
use Common\Model\Detail;
use Common\Model\TypeAttr;
use Common\Model\Type;
use Common\Model\Brand;
use Common\Model\Cate;
use Common\Model\GoodsList;
class Goods extends Model{
	//指定表名,在这里写了 ，数据库和表名不能用驼峰命名，都要用小写，用下划线来命名
	protected $table='shop_goods';
	//验证提交的数据是否符合
	protected $validate=array(
		array('gname','required','商品名称不能为空',3,3),
		array('gnumber','required','商品货号不能为空',3,3),
		array('unit','required','商品单位不能为空',3,3),
		array('marketprice','required','市场价格不能为空',3,3),
		array('shopprice','required','商城价格不能为空',3,3),
		array('stock','required','库存数量不能为空',3,3),
		array('pic','required','列表图不能为空',3,3),
		array('shop_category_cid','required','分类名称不能为空',3,3),
		array('shop_brand_bid','required','品牌名称不能为空',3,3)
	);
	
	//添加到数据库 
	public function store(){
				
			
		//先验证每个表格应该提交的信息是否提交
//		第一张表的验证		
		if(!$this->create()) return false;
		//第二张表的验证,这个地方有个问题啊，因为字段不一样了，还怎么验证，就不能create，感觉create只能对一维数组起作用
		$goodsAttrModel=new GoodsAttr;
//		if(!$goodsAttrModel->create()){

//			$this->error=$goodsAttrModel->getError();
//			 return false;
//		} 
		
		//第三张表的验证
		$goodsDetailModel=new Detail;
		if(!$goodsDetailModel->create()){
			$this->error=$goodsDetailModel->getError();
			return false;
		}
		
		//不得不承认，这个create方法真生猛，只找到name名和表格字段一致的数据，其他数据自动过滤掉,并且是一维数组
		$goodsData=$this->create();
	
		$goodsData['time']=time();
//		$goodsData['shop_category_cid']=Q('post.cid');
//		$goodsData['shop_brand_bid']=Q('post.brand_bid');
		
		//我在这里通过分类的id找到它对应的类型id，再压给goods表格中
		$cid=Q('post.shop_category_cid');
		$shop_type_tid=Db::table('shop_category')->where("cid={$cid}")->pluck('shop_type_tid');
		$goodsData['shop_type_tid']=$shop_type_tid;
		//添加商品表第一张表，返回自增id
		$gid=$this->add($goodsData);

		//添加 第二张表，    添加商品属性表
		
		//添加属性,提交过来有很多数组的数据，我们只取其中attr的
//		添加不可选属性
		$attr=Q('post.attr');
		//如果添加的话
		//为什么要加个if判断，不加就报错？
		if($attr){
			foreach($attr as $taid=>$v){
				//如果添加的话
				if($v){
					$data=array(
					'gtvalue'=>$v,
					'shop_type_attr_taid'=>$taid,
					'shop_goods_gid'=>$gid	
					);
					//组合成数组数据通过add()方法压到表格中去
					$goodsAttrModel->add($data);
				}	
			} 
		}
		//添加规格
		$spec=Q('post.spec');
		//如果添加的话
		if($spec){
			$value=$spec['value'];
			foreach($value as $taid => $v){
				foreach($v as $kk =>$vv){
					if($vv){

					$data=array(
						'gtvalue'=>$vv,
						//这个地方的字段我作为类型属性的id来对应处理的,经过大改数据库，把字段换过来了
						'shop_type_attr_taid'=>$taid,
						'shop_goods_gid'=>$gid,
						'added'=>$spec['added'][$taid][$kk]
					);
					$goodsAttrModel->add($data);											
					}
				}
			}
		}
		

	
		//添加第三张表		
		$intro=Q('post.intro');
		$service=Q('post.service');
//		因为上传的是多个图片，组合成的数组，那么我们要循环改变路径
		$big=Q('post.big');
		$bigPath='';
		foreach ($big as $k => $v) {
			$oldPath=$v;
			//strrchr()方法，获得最后一次.出现位置往后的数据
			$type=strrchr($oldPath,'.');
			//形成新的地址
			//替换字符串
			$newMiddlePath=str_replace($type,'_middle'.$type, $oldPath);
				//缩略图中等图片
			Image::thumb($oldPath,$newMiddlePath,428,428,1);	
				//缩略图小图片
			$newSmallPath=str_replace($type,'_small'.$type,$oldPath);
			Image::thumb($oldPath,$newSmallPath,55,55,1);
			
			$bigPath=$bigPath.'|'.$v;
		}
			
		//开始压数据了
		$detailData['intro']=$intro;
		$detailData['service']=$service;
		$detailData['big']=$bigPath;
		
		$detailData['shop_goods_gid']=$gid;
		
		$goodsDetailModel->add($detailData);
			
		return true;
	}
	
	
	
	public function edit(){
		$gid=Q('post.gid',0,'intval');
//		因为为了得到老的图片路径，否则其他地方没法得打
		$oldPicPath=$this->where("gid={$gid}")->pluck('pic');
		$detailModel=new Detail;
		$oldBigPath=$detailModel->where("shop_goods_gid={$gid}")->pluck('big');
//		p($oldBigPath);exit;
//	   编辑过程经历了两个过程，更新和删除，现在情况是更新goods表，删除goods_attr和detail表，再重新添加
//	    1、第一张表的验证，goods表格的验证 
		if(!Q('post.pic')){
			$_POST['pic']=Q('post.old_pic');
			$recordPic=1;	
		}
		if(!Q('post.big')){
			$_POST['big']=Q('post.old_big');
			$recordBig=1;	
		}
		if(!$this->create()) return FALSE;
//	   第一步先更新添加
		//第二张表的验证，goos_attr表格,第二张表没法验证
		$goodsAttrModel=new GoodsAttr;
		
		//第三张表的验证
		$goodsDetailModel=new Detail;
		if(!$goodsDetailModel->create()){
			$this->error=$goodsDetailModel->getError();
			return FALSE;
		}
		
		//2、删除多余的图册
//		if(!isset($recordPic)){
//			if(isset($oldPicPath)){
//				unlink($oldPicPath);
//			}
//		}
		
		if(!isset($recordBig)){
			//①原有的图册删掉
			$bigArr=explode('|', $oldBigPath);
			foreach ($bigArr as  $v){
				if($v){
					$bigArrNew[]=$v;
				}
			}
			foreach ($bigArrNew as  $vv){
				$oldPath1=$vv;
				//strrchr()方法，获得最后一次.出现位置往后的数据
				$type=strrchr($oldPath1,'.');
				//形成新的地址
				//替换字符串
				$middlePath=str_replace($type,'_middle'.$type, $oldPath1);
					//删除此中等图片
					unlink($middlePath);
					//删除此小号图片
				$smallPath=str_replace($type,'_small'.$type,$oldPath1);
					unlink($smallPath);
			}
			//②添加新的图片数据
			$newBigPath='';
			foreach (Q('post.big') as  $vvv) {
				
				//strrchr()方法，获得最后一次.出现位置往后的数据
				$type=strrchr($vvv,'.');
				//形成新的地址
				//替换字符串
				$newMiddlePath=str_replace($type,'_middle'.$type, $vvv);
					//缩略图中等图片
				Image::thumb($vvv,$newMiddlePath,60,60,1);	
					//缩略图小图片
				$newSmallPath=str_replace($type,'_small'.$type,$vvv);
				Image::thumb($vvv,$newSmallPath,30,30,1);
				
				$newBigPath=$BigPath.'|'.$vvv;
			}
			$_POST['big']=$newBigPath;
		}
		
//		3、删除shop_goods_attr表，删除detail表
		$detailModel->where("shop_goods_gid={$gid}")->delete();
		$goodsAttrModel=new GoodsAttr;
		$goodsAttrModel->where("shop_goods_gid={$gid}")->delete();


		// 4、要更新商品表，那么我们就清掉对应的货品列表，要手动去重新添加
		$goodsListModel=new GoodsList;
		$goodsListModel->where("shop_goods_gid={$gid}")->delete();
		
		
//		1、goods表的更新
		$cateModel=new Cate;
		$cid=Q('post.shop_category_cid');
		$shop_type_tid=$cateModel->where("cid={$cid}")->pluck('shop_type_tid');
		$this->data['shop_type_tid']=$shop_type_tid;
		$this->data['time']=time();
		$this->save();
		
//		2、shop_goods_attr表的更新
		
		$attr=Q('post.attr');
		//如果添加的话
		//为什么要加个if判断，不加就报错？
		if($attr){
			foreach($attr as $taid=>$v){
				//如果添加的话
				if($v){
					$data=array(
					'gtvalue'=>$v,
					'shop_type_attr_taid'=>$taid,
					'shop_goods_gid'=>$gid	
					);
					//组合成数组数据通过add()方法压到表格中去
					$goodsAttrModel->add($data);
				}	
			} 
		}
		//添加规格
		$spec=Q('post.spec');
		//如果添加的话
		if($spec){
			$value=$spec['value'];
			foreach($value as $taid => $v){
				foreach($v as $kk =>$vv){
					if($vv){

					$data=array(
						'gtvalue'=>$vv,
						//这个地方的字段我作为类型属性的id来对应处理的,经过大改数据库，把字段换过来了
						'shop_type_attr_taid'=>$taid,
						'shop_goods_gid'=>$gid,
						'added'=>$spec['added'][$taid][$kk]
					);
					$goodsAttrModel->add($data);											
					}
				}
			}
		}
		
		//3、添加shop_detail表
		//添加第三张表		
		$intro=Q('post.intro');
		$service=Q('post.service');
//		因为上传的是多个图片，组合成的数组，那么我们要循环改变路径
		$big=Q('post.big');	
		//开始压数据了
		$detailData['intro']=$intro;
		$detailData['service']=$service;
		
		//②添加新的图片数据
		if(!isset($recordBig)){
			$newBigPath='';
			foreach (Q('post.big') as  $vvv) {
			
				//strrchr()方法，获得最后一次.出现位置往后的数据
				$type=strrchr($vvv,'.');
				//形成新的地址
				//替换字符串
				$newMiddlePath=str_replace($type,'_middle'.$type, $vvv);
					//缩略图中等图片
				Image::thumb($vvv,$newMiddlePath,60,60,1);	
					//缩略图小图片
				$newSmallPath=str_replace($type,'_small'.$type,$vvv);
				Image::thumb($vvv,$newSmallPath,30,30,1);
				
				$newBigPath=$BigPath.'|'.$vvv;
			}
			$big=$newBigPath;
		}else{
			$big=$oldBigPath;
		}
		
			
		$detailData['big']=$big;
		
		$detailData['shop_goods_gid']=$gid;
		
		$goodsDetailModel->add($detailData);
			
		return true;
	}

	
}